package com.hancheng.commoncloud.framework.config;

import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.*;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.Collections;
import java.util.List;

/**
 * 通用 Knife4j 支持类（多分组）
 */
@Configuration
public class Knife4jCommonConfig {

    /**
     * 公共请求头（如 token）
     */
    public List<Parameter> globalHeader() {
        Parameter token = new ParameterBuilder()
                .name("Auth-Token")
                .description("登录令牌")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();

        return Collections.singletonList(token);
    }

    /**
     * 创建 Docket 分组
     *
     * @param groupName   分组名（显示在 Knife4j 左侧菜单）
     * @param basePackage 扫描 controller 包路径
     * @param description 描述信息
     */
    public Docket createDocket(String groupName, String basePackage, String description) {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName(groupName)
                .apiInfo(apiInfo(groupName, description))
                .select()
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(globalHeader());
    }

    private ApiInfo apiInfo(String title, String description) {
        return new ApiInfoBuilder()
                .title(title + " 接口文档")
                .description(description)
                .version("1.0.0")
                .contact(new Contact("韩诚", "", "1247419134@qq.com"))
                .build();
    }
}
